#pragma once

#include <vector>

class GameControls;
class ServiceProvider;
class Menu;

class MenuManager {
public:
	typedef std::vector<Menu*> MenuStack;

	MenuManager(ServiceProvider* sp, GameControls* gc);
	~MenuManager();

	void PushMenu(Menu* menu);
	void PopMenu();
	void SetMenu(Menu* menu);

	Menu* GetStartingMenu(){ return starting_menu_; }
	Menu* GetMainMenu(){ return main_menu_; }
	Menu* GetLoadMenu(){ return load_menu_; }

	Menu* GetCurrentMenu(){ return current_menu_; }

	ServiceProvider* GetServiceProvider() { return sp_; }
	GameControls* GetGameControls() { return gc_; }

private:
	ServiceProvider* sp_;
	GameControls* gc_;

	Menu* current_menu_;
	MenuStack menu_stack_;

	Menu* starting_menu_;
	Menu* main_menu_;
	Menu* load_menu_;
};
